package com.seeyon.apps.kk.manager;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.seeyon.cap4.form.bean.FormBean;
import com.seeyon.cap4.form.bean.FormDataMasterBean;
import com.seeyon.cap4.form.bean.FormFieldBean;
import com.seeyon.ctp.common.exceptions.BusinessException;

public interface FormDataBaseManager {

	/**
	 * 保存无流程底表数据
	 * @param formCode 底表模版编号
	 * @param params 表单的Map对象
	 * map 的key值为:
	 * 1	主表单控件的名称
	 * 2	从表为从表名称,value为List<Map>
	 * 3	从表value的Map的key为从表控件名称
	 * @return formmain_****表的id
	 * @throws BusinessException
	 * @throws SQLException
	 */
	public Long saveUnflowData(String formCode, String createLoginName, Map<String, Object> params) throws BusinessException, SQLException;
	
	/**
	 * 通过表单模版删除无流程底表数据
	 * @param formCode
	 */
	public void deleteUnflowData(String formCode);
	
	/**
	 * 修改表单数据
	 * @param formCode 底表模版编号
	 * @param dataBean FormDataMasterBean对象
	 * @param params 表单的Map对象
	 * map 的key值为:
	 * 1	主表单控件的名称
	 * 2	从表为从表名称,value为List<Map>
	 * 3	从表value的Map的key为从表控件名称
	 * @param unique 从表唯一校验对象
	 * 			map.add(从表名称，从表控件名称,多个控件以","分隔)
	 * @return
	 * @throws BusinessException
	 * @throws SQLException
	 */
	public String updateFormData(String formCode, FormDataMasterBean dataBean, 
			Map<String, Object> params, Map<String, String> unique) throws BusinessException, SQLException;
	
	/**
	 * 修改无流程底表
	 * @param formCode 底表模版编号
	 * @param dataBean
	 * @param param
	 * @return
	 * @throws BusinessException
	 * @throws SQLException
	 */
	public String updateFormData(String formCode, FormDataMasterBean dataBean, 
			Map<String, Object> param) throws BusinessException, SQLException;
	
	/**
	 * 根据field将值obj放入params
	 * @param field
	 * @param obj
	 * @param params
	 */
	public void change2Map(FormFieldBean field, Object obj, Map params);
	
	
	
	/**
	 * 根据summaryId自动将模版编号为formBean的表单中的表单转word控件生成文件，并保存成
	 * @param summaryId
	 * @param formBean
	 * @param formDataBean
	 */
	public void autoGenerateWord(Long summaryId, FormBean formBean, FormDataMasterBean formDataBean);
	

	/**
	 * 获取配置文件的内容
	 * @param key 文件json字符串的key
	 * @param templateFileName 配置文件在freemarker下的文件名
	 * @param model
	 * @return
	 */
	public String fltTemplateIntoString(String key, String templateFileName, Object model);

	/**
	 * 获取有效的关键人员底表数据
	 * @param formBean
	 * @param formDataBean
	 * @return
	 * @throws BusinessException
	 * @throws SQLException
	 */
	public List<FormDataMasterBean> findActiveKeyMember(FormBean formBean, FormDataMasterBean formDataBean) throws BusinessException, SQLException;
	
	/**
	 * 获取枚举树结构
	 * @param enumName 枚举名称
	 * @param ids 选中的枚举值
	 * @param showLevel 展示层级1：顶层 	0：最底层
	 * @return
	 */
	public List<Map> getTreeDate(String enumName, String ids, int showLevel);
	

}
